// 子模块moduleA路径：store/modules/moduleA.js
export default {
  // 命名空间
  namespaced: true,
  state: {
    // 如果你的本地存储有值，就拿出来 ，如果没有值 就空数组
    list: uni.getStorageSync("hmUgo") || [],
  },
  getters: {
    // 计算出全部商品的购买数量
    totalNum(state) {
      let num = 0;
      state.list.forEach((v) => {
        return (num += v.num);
      });
      return num;
    },
    // 勾选了的商品数组
    checkedCarts(state) {
      return state.list.filter((v) => v.checked);
    },
    // 勾选了的商品的总价
    checkedCartPrice(state, getters) {
      return getters.checkedCarts.reduce(
        (s, v) => s + v.num * v.goods_price,
        0
      );
    },
    // 勾选了的商品的总数量
    checkedCartNum(state, getters) {
      return getters.checkedCarts.reduce((s, v) => s + v.num, 0);
    },
    // 计算 要不要全选
    allCheck(state, getters) {
      // 判断   购物车数组长度  和 选中的商品数组的长度 是否相等
      // 相等  全选 不相等 不要全选
      return (
        state.list.length && state.list.length === getters.checkedCarts.length
      );
    },
  },
  mutations: {
    // 添加商品
    addCart(state, obj) {
      // 判断商品是否存在 找到就返回数组下标 找不到就返回-1
      // v = list 中 每一个对象
      const index = state.list.findIndex((v) => v.goods_id === obj.goods_id);
      if (index === -1) {
        // 没有购买过
        // 新增商品
        state.list.push({ ...obj, num: 1, checked: true });
      } else {
        // 已经购买过
        state.list[index].num++;
      }
      // 存一份到 本地存储中
      uni.setStorageSync("hmUgo", state.list);
    },
    // 商品选中切换
    toggleGoodsCheck(state, index) {
      // 取反
      state.list[index].checked = !state.list[index].checked;
      // 存一份到 本地存储中
      uni.setStorageSync("hmUgo", state.list);
    },
    // 全选按钮 控制 商品选中状态
    toggleAllCheck(state, payload) {
      const allCheck = !this.getters["cart/allCheck"];
      state.list.forEach((v) => (v.checked = allCheck));
    },
    // 商品数量的改变
    numChange(state, obj) {
      state.list[obj.index].num += obj.num;
      // 存一份到 本地存储中
      uni.setStorageSync("hmUgo", state.list);
    },
    //  删除数组中的一个元素
    delGoods(state, index) {
      state.list.splice(index, 1);
      // 存一份到 本地存储中
      uni.setStorageSync("hmUgo", state.list);
    },
  },
  actions: {},
};
